 ;-----------------------------\
 ;escape 4k demo                 \
 ;made for code craft contest      \
 ;code - tom/kulture 1999            \
 ;------------------------------------ \

 ;Ray caster---------------------------------------------------------------|
 ;Calculates stuff required for ray tracing in the planes/tunnel effect

 ;if you want to understand what is going on here then take a look
 ;in the readme file

 adr r14,vr
 ldmia r14,{r0-r8}

 ;rotation...

 ;x
 ldr r11,cos
 ldr r10,xangle
 mov r10,r10,asr #2
 ldr r9,[r11,r10,lsl #2]!
 ldr r10,[r11,#64*4]
 ;1
 mul r13,r9,r1
 mul r14,r10,r2
 mul r11,r10,r1
 mla r2,r9,r2,r11 ;z
 sub r1,r13,r14 ;y
 mov r1,r1,asr #14
 mov r2,r2,asr #14
 ;2
 mul r13,r9,r4
 mul r14,r10,r5
 mul r11,r10,r4
 mla r5,r9,r5,r11 ;z
 sub r4,r13,r14 ;y
 mov r4,r4,asr #14
 mov r5,r5,asr #14
 ;3
 mul r13,r9,r7
 mul r14,r10,r8
 mul r11,r10,r7
 mla r8,r9,r8,r11 ;z
 sub r7,r13,r14 ;y
 mov r7,r7,asr #14
 mov r8,r8,asr #14

 ;y
 ldr r11,cos
 ldr r10,yangle
 mov r10,r10,asr #2
 ldr r9,[r11,r10,lsl #2]!
 ldr r10,[r11,#64*4]
 ;1
 mul r13,r9,r0
 mul r14,r10,r2
 mul r11,r10,r0
 mla r2,r9,r2,r11 ;z
 sub r0,r13,r14 ;y
 mov r0,r0,asr #14
 mov r2,r2,asr #14
 ;2
 mul r13,r9,r3
 mul r14,r10,r5
 mul r11,r10,r3
 mla r5,r9,r5,r11 ;z
 sub r3,r13,r14 ;y
 mov r3,r3,asr #14
 mov r5,r5,asr #14
 ;3
 mul r13,r9,r6
 mul r14,r10,r8
 mul r11,r10,r6
 mla r8,r9,r8,r11 ;z
 sub r6,r13,r14 ;y
 mov r6,r6,asr #14
 mov r8,r8,asr #14

 ;z
 ldr r11,cos
 ldr r10,zangle
 mov r10,r10,asr #2
 ldr r9,[r11,r10,lsl #2]!
 ldr r10,[r11,#64*4]
 ;1
 mul r13,r9,r0
 mul r14,r10,r1
 mul r11,r10,r0
 mla r1,r9,r1,r11 ;z
 sub r0,r13,r14 ;y
 mov r0,r0,asr #14
 mov r1,r1,asr #14
 ;2
 mul r13,r9,r3
 mul r14,r10,r4
 mul r11,r10,r3
 mla r4,r9,r4,r11 ;z
 sub r3,r13,r14 ;y
 mov r3,r3,asr #14
 mov r4,r4,asr #14
 ;3
 mul r13,r9,r6
 mul r14,r10,r7
 mul r11,r10,r6
 mla r7,r9,r7,r11 ;z
 sub r6,r13,r14 ;y
 mov r6,r6,asr #14
 mov r7,r7,asr #14


 ;x movement
 ;x
 mov r13,#(1<<14)/xres
 sub r9,r3,r0
 mul r9,r13,r9
 ;y
 sub r10,r4,r1
 mul r10,r13,r10
 ;z
 sub r11,r5,r2
 mul r11,r13,r11
 ;store
 adr r12,vx
 stmia r12!,{r9-r11}

 ;y movement
 ;x
 mov r13,#(1<<14)/yres
 sub r9,r6,r0
 mul r9,r13,r9
 ;y
 sub r10,r7,r1
 mul r10,r13,r10
 ;z
 sub r11,r8,r2
 mul r11,r13,r11
 ;store
 stmia r12,{r9-r11}

 ;set start point
 mov r0,r0,lsl #14
 mov r1,r1,lsl #14
 mov r2,r2,lsl #14

 ldr pc,effect

 #set xvw=160
 #set yvw=128
 #set zvw=150

.vr
 DCD -xvw
 DCD yvw
 DCD zvw

 DCD xvw
 DCD yvw
 DCD zvw

 DCD -xvw
 DCD -yvw
 DCD zvw


.xangle
 dcd 0
.yangle
 dcd 0
.zangle
 dcd 0

 ;Datas for casting fx...

.vx
 dcd 0
 dcd 0
 dcd 0
.vy
 dcd 0
 dcd 0
 dcd 0
.oc
 dcd 0
 dcd 0
 dcd 0

.z
 dcd 0

.radius
 dcd 0

.lc
 dcd 512+100
 dcd 512+100
